package udpEcho;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class Client {
    //创建socket对象
    private DatagramSocket socket = null;
    //记录使用的服务器ip
    private String serverIp;
    //记录服务器所在的端口号
    private int serverPort;
    //初始化时要指明对应的ip和端口号，以便和服务器建立udp链接
    public Client(String serverIp,int serverPort) throws SocketException {
        //让客户端调用Client时候，就传入需要的客户端ip和端口号，并初始化
        socket = new DatagramSocket();
        this.serverIp = serverIp;
        this.serverPort = serverPort;
    }
    public void start() throws IOException {
        //客户端日志
        System.out.println("Client启动 ");
        //回显客户端需要传入String类型数组
        Scanner in = new Scanner(System.in);
        while(true){
            //提示用户输入
            System.out.println("-> ");
            //获取输入
            String request = in.next();
            //加入出口
            if(request == "exit"){
                break;
            }
            //把输入的String包装成DatagramPacket形式传出，需要读入的字节形式，读入的长度，
            // 客户端的ip（需要对原始客户端ip包装一下），客户端的端口号
            DatagramPacket requestPort = new DatagramPacket(request.getBytes(),
                    request.length(), InetAddress.getByName(serverIp),serverPort);
            //传出客户端，传入服务器
            socket.send(requestPort);
            //对准备接受的DatagramPacket做准备
            DatagramPacket responsePacket = new DatagramPacket(new byte[1024],1024);
            //把响应传入准备好的容器
            socket.receive(responsePacket);
            //对原始容器初始化，转成字符串
            String response = new String(responsePacket.getData(),0,
                    responsePacket.getLength());
            //打印字符串到客户端
            System.out.println(response);

        }
    }

    public static void main(String[] args) throws IOException {
        //向client中传入要访问的服务器ip和端口号
        Client client = new Client("127.0.0.1",1010);
        //启动客户端程序
        client.start();
    }
}
